package qq.android.wan.qq.chat.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;

import qq.android.wan.qq.R;

public class BaiduMapActivity extends Activity {
    private MapView mapView = null;
    private BaiduMap baiduMap;
    private TextView tv_back;
    private Button btn_send;
    private BitmapDescriptor bitmapDescriptor;
    private BDLocation bdLocation;//定位后存放的位置信息
    private BDLocationListener bdLocationListener;//百度地图获取位置的监听
private LocationClient locationClient =null;//可以理解成定位的客户端
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_baidu_map_chat);
        initUI();
        initListener();
        baiduMap = mapView.getMap();
        //构建Marker图标
        bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
        Intent intent = getIntent();
        if (intent.getBooleanExtra("listView", false)) {
            //说明是在聊天记录中点击了查看地图
            btn_send.setVisibility(View.GONE);
            double latitude = intent.getDoubleExtra("latitude", 0);
            double longitude = intent.getDoubleExtra("longitude", 0);
            String address = intent.getStringExtra("address");
            Toast.makeText(BaiduMapActivity.this, address, Toast.LENGTH_SHORT).show();
            showMap(new LatLng(latitude, longitude));

        } else {
            //发送地图

            locationClient = new LocationClient(this);
            //设置定位条件
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);        //是否打开GPS
            option.setIsNeedAddress(true);
            option.setCoorType("bd09ll");       //设置返回值的坐标类型。
            option.setPriority(LocationClientOption.NetWorkFirst);  //设置定位优先级
            option.setProdName("LocationDemo"); //设置产品线名称。强烈建议您使用自定义的产品线名称，方便我们以后为您提供更高效准确的定位服务。
            option.setScanSpan(100000);    //设置定时定位的时间间隔。单位毫秒
            //给客户端设置参数
            locationClient.setLocOption(option);
            //给客户端注册监听(调用完locationClient.start()后，手机会定位，定位的结果就BDlocation)
            bdLocationListener = new BDLocationListener() {
                @Override
                public void onReceiveLocation(BDLocation bdLocation1) {
                    //设定中心点坐标(通过经度和纬度)
                    if(bdLocation1.getAddrStr()==null){
                        Toast.makeText(BaiduMapActivity.this, "定位失败", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    LatLng cenpt = new LatLng(bdLocation1.getLatitude(), bdLocation1.getLongitude());
                    showMap(cenpt);
                    bdLocation = bdLocation1;
                }
            };
            locationClient.registerLocationListener(bdLocationListener);
            //告诉应用程序，我要定位了
            locationClient.start();
        }
    }

    /**
     * 通过设置的中心点显示地图
     *
     * @param cenpt 中心点的坐标
     */
    private void showMap(LatLng cenpt) {

        //覆盖物参数选项
        OverlayOptions options = new MarkerOptions()
                .icon(bitmapDescriptor)//设置标志物的图标
                .position(cenpt);//设置标志物的中心点
        //把这个标志物添加到地图上
        //覆盖物参数选项
        OverlayOptions options1 = new MarkerOptions()
                .icon(bitmapDescriptor)//设置标志物的图标
                .position(new LatLng(29.58,114.05));//设置标志物的中心点
        //把这个标志物添加到地图上
        baiduMap.addOverlay(options);
baiduMap.addOverlay(options1);
        //定义地图状态
        MapStatus mMapStatus = new MapStatus.Builder()
                .target(cenpt)
                .zoom(18)
                .build();
        //定义MapStatusUpdate对象，以便描述地图状态将要发生的变化
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        //改变地图状态(显示的经纬度处的地图)
        baiduMap.setMapStatus(mMapStatusUpdate);
    }

    private void initUI() {
        mapView = (MapView) findViewById(R.id.bmapView);
        tv_back = (TextView) findViewById(R.id.tv_back);
        btn_send = (Button) findViewById(R.id.btn_send);
    }

    private void initListener() {
        tv_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendLocation();
            }
        });
    }

    private void sendLocation() {
        if(bdLocation==null){
            Toast.makeText(BaiduMapActivity.this,"定位失败，发送位置失败",Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent();
        intent.putExtra("latitude", bdLocation.getLatitude());
        intent.putExtra("longitude", bdLocation.getLongitude());
        intent.putExtra("address", bdLocation.getAddrStr());
        this.setResult(RESULT_OK, intent);
        finish();
    }

    @Override
    protected void onDestroy() {

        //在activity执行onDestroy时执行mMapView.onDestroy()，实现地图生命周期管理
        if(locationClient!=null)
            locationClient.stop();
        if (mapView != null)
            mapView.onDestroy();

        super.onDestroy();
    }

    @Override
    protected void onResume() {

        //在activity执行onResume时执行mMapView. onResume ()，实现地图生命周期管理
        if (mapView != null)
            mapView.onResume();
        super.onResume();
    }

    @Override
    protected void onPause() {

        //在activity执行onPause时执行mMapView. onPause ()，实现地图生命周期管理
        if (mapView != null)
            mapView.onPause();

        super.onPause();
    }

}
